home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 233_01 / msftsdr.asm < prev    next >
Assembly Source File  |  1987-06-29  |  4KB  |  201 lines

  1. ;   VERSION 0011  (DATE: 18/05/87)  (TIME: 15:02)   ;
  2. COMMENT *
  3.   CALL MSFORTRAN DOUBLE PRECISION TRANSCENDENTALS FROM DLC
  4.     date: 15 May 1987
  5.     file: MSFTSDR.ASM
  6.     use:  E.G.:    double y,x;
  7.                   y=sin(x);
  8.  
  9.     mods: 17 May 1987: use macros for repetitious parts
  10. *
  11.  
  12. INCLUDE    MSCALLS.ASM
  13.  
  14. begdata
  15.  
  16. temp    DW    4 DUP (0)    ;to hold real*8 returned
  17.                 ;MS FORTRAN puts LSB of IEEE REAL*8 in
  18.                 ;temp[0] and MSB in temp[7]
  19. enddata
  20.  
  21.     ;assume MS compiled as large model
  22.     EXTRN    SNDRQQ:FAR    ;SIN
  23.     EXTRN    CNDRQQ:FAR    ;COSINE
  24.     EXTRN    TNDRQQ:FAR    ;TANGET
  25.     EXTRN    ASDRQQ:FAR    ;ARC SINE
  26.     EXTRN    ACDRQQ:FAR    ;ARC COSINE
  27.     EXTRN    ATDRQQ:FAR    ;ARC TANGENT
  28.     EXTRN    A2DRQQ:FAR    ;ARC TANGENT2
  29.     EXTRN    SHDRQQ:FAR    ;HYPERBOLIC SINE
  30.     EXTRN    CHDRQQ:FAR    ;    "      COSINE
  31.     EXTRN    THDRQQ:FAR    ;    "      TANGENT
  32.     EXTRN    EXDRQQ:FAR    ;EXPONENTIATION
  33.     EXTRN    LNDRQQ:FAR    ;NATURAL LOG
  34.     EXTRN    LDDRQQ:FAR    ;COMMON LOG
  35.     EXTRN    SRDRQQ:FAR    ;SQ.ROOT
  36.     EXTRN    PIDRQQ:FAR    ;POWER: REAL BASE TO INTEGER
  37.     EXTRN    PRDRQQ:FAR    ;POWER: REAL BASE TO REAL
  38.  
  39. begcode
  40.     PUBLIC    sin        ;make sin func global
  41.     PUBLIC    cos
  42.     PUBLIC    tan
  43.     PUBLIC    asin
  44.     PUBLIC    acos
  45.     PUBLIC    atan
  46.     PUBLIC    sinh
  47.     PUBLIC    cosh
  48.     PUBLIC    tanh
  49.     PUBLIC    exp
  50.     PUBLIC    log
  51.     PUBLIC    log10
  52.     PUBLIC    sqrt
  53.     PUBLIC  atan2
  54.     PUBLIC  pow
  55.     PUBLIC  ipow        ;real raised to integer
  56.  
  57. func    sin
  58.     callpro temp        ;macro: sin result into temp
  59.     call    FAR PTR SNDRQQ    ;MSFORTRAN double precision DSIN
  60.     callepi            ;macro: xfer temp to AX,BX,CX,DX
  61.     ret
  62. sin    endp
  63.  
  64. func    cos
  65.     callpro temp
  66.     call    FAR PTR CNDRQQ    ;MSFORTRAN DCOS
  67.     callepi
  68.     ret
  69. cos    endp
  70.  
  71. func    tan
  72.     callpro temp
  73.     call    FAR PTR TNDRQQ    ;MSFORTRAN double prec. DTAN
  74.     callepi
  75.     ret
  76. tan    endp
  77.  
  78. func    asin
  79.     callpro temp
  80.     call    FAR PTR ASDRQQ    ;MSFORTRAN DASIN
  81.     callepi
  82.     ret
  83. asin    endp
  84.  
  85. func    acos
  86.     callpro temp
  87.     call    FAR PTR ACDRQQ    ;MSFORTRAN DACOS
  88.     callepi
  89.     ret
  90. acos    endp
  91.  
  92. func    atan
  93.     callpro    temp
  94.     call    FAR PTR ATDRQQ    ;MSFORTRAN DATAN
  95.     callepi
  96.     ret
  97. atan    endp
  98.  
  99. func    sinh
  100.     callpro    temp
  101.     call    FAR PTR SHDRQQ    ;MSFORTRAN DSINH
  102.     callepi
  103.     ret
  104. sinh    endp
  105.  
  106. func    cosh
  107.     callpro    temp
  108.     call    FAR PTR CHDRQQ    ;MSFORTRAN DCOSH
  109.     callepi
  110.     ret
  111. cosh    endp
  112.  
  113. func    tanh
  114.     callpro    temp
  115.     call    FAR PTR THDRQQ    ;MSFORTRAN DTANH
  116.     callepi
  117.     ret
  118. tanh    endp
  119.  
  120. func    exp
  121.     callpro    temp
  122.     call    FAR PTR EXDRQQ    ;MSFORTRAN DEXP
  123.     callepi
  124.     ret
  125. exp    endp
  126.  
  127. func    log
  128.     callpro    temp
  129.     call    FAR PTR LNDRQQ    ;MSFORTRAN DLOG
  130.     callepi
  131.     ret
  132. log    endp
  133.  
  134. func    log10
  135.     callpro    temp
  136.     call    FAR PTR LDDRQQ    ;MSFORTRAN DLOG10
  137.     callepi
  138.     ret
  139. log10    endp
  140.  
  141. func    sqrt
  142.     callpro temp
  143.     call    FAR PTR SRDRQQ    ;MSFORTRAN DSQRT
  144.     callepi
  145.     ret
  146. sqrt    endp
  147.  
  148. func    atan2            ;has 2 args
  149.     push    BP        ;save old frame ptr
  150.     mov    BP,SP
  151.     mov    BX,BP
  152.     add    BX,p        ;span ret addr
  153.     push    SS        ;push segment of arg, reqd by MSFortran
  154.     push    BX        ;addr of numerator on stack
  155.     add    BX,8        ;span first C arg
  156.     push    SS
  157.     push    BX        ;addr of denominator on stack
  158.     mov    BX,OFFSET temp    ;offset of temp var for return
  159.     push    BX
  160.     call    FAR PTR A2DRQQ    ;MSFORTRAN DATAN2
  161.     callepi
  162.     ret
  163. atan2    endp
  164.  
  165. func    pow
  166.     push    BP        ;save old frame ptr
  167.     mov    BP,SP
  168.     mov    BX,BP
  169.     add    BX,p
  170.     push    SS        ;push segment of arg, reqd by MSFortran
  171.     push    BX        ;addr of double base arg on stack
  172.     add    BX,8        ;bytes in double
  173.     push    SS
  174.     push    BX        ;addr of double exponent on stack
  175.     mov    BX,OFFSET temp    ;offset of temp var for return
  176.     push    BX
  177.     call    FAR PTR PRDRQQ    ;MSFORTRAN X**Y
  178.     callepi
  179.     ret
  180. pow    endp
  181.  
  182. func    ipow            ;double x,y; long i; y=ipow(x,i)
  183.     push    BP        ;save old frame ptr
  184.     mov    BP,SP
  185.     mov    BX,BP
  186.     add    BX,p
  187.     push    SS        ;push segment of arg, reqd by MSFortran
  188.     push    BX        ;addr of double base on stack
  189.     add    BX,8        ;bytes in double
  190.     push    SS
  191.     push    BX        ;addr of long exponent on stack
  192.     mov    BX,OFFSET temp    ;offset of temp var for return
  193.     push    BX
  194.     call    FAR PTR PIDRQQ    ;MSFORTRAN X**I
  195.     callepi
  196.     ret
  197. ipow    endp
  198.  
  199. endcode
  200.     END
  201.